﻿/*****************************************介绍*****************************************
 * 作者：Ywh
 * 创建时间：2023-12-28　10:35:55
 * 功能：Scroll View关键信息接口，与ScrollViewContentOptimize类配合使用
 *		1、为ScrollViewContentOptimize类提供了关键数据
**************************************************************************************/

namespace UnityEngine.UI.Optimize
{
    public interface IScrollViewCruxInfo
    {
        /// <summary>
        /// 获取Item的实例对象
        /// 应该从对象池或其它地方实例化获取
        /// </summary>
        RectTransform GetItemInstance();

        /// <summary> 删除实例化对象（应该回收到对象池或直接销毁）</summary>
        /// <param name="instance">要删除的对象</param>
        /// <param name="index">对象所在的索引</param>
        void DestoryInstance(GameObject instance, int index);

        /// <summary>对象在UI上初始化之后的处理</summary>
        void InstanceInitAfterHandle(GameObject instance, int index);

        /// <summary>设置内容的数量，该接口一般在更新该属性时使用
        /// <para>配合<see cref="ScrollViewContentOptimize.Refresh()"/>使用</para>
        /// <para>如果不更新该数据可以不实现该接口</para>
        /// </summary>
        void SetItemsCount(int newCount);

        /// <summary>设置单个内容的宽度，该接口一般在更新该属性时使用
        /// <para>配合<see cref="ScrollViewContentOptimize.Refresh()"/>使用</para>
        /// <para>如果不更新该数据可以不实现该接口</para>
        /// </summary>
        void SetItemWidth(int newWidth);

        /// <summary>设置单个内容的高度，该接口一般在更新该属性时使用
        /// <para>配合<see cref="ScrollViewContentOptimize.Refresh()"/>使用</para>
        /// <para>如果不更新该数据可以不实现该接口</para>
        /// </summary>
        void SetItemHeight(int newHeight);

        /// <summary>获取当前可视范围内应有的Item对象数量</summary>
        int ItemsCount { get; }

        /// <summary>获取模板对象的宽度</summary>
        float ItemWidth { get; }

        /// <summary>获取模板对象的高度</summary>
        float ItemHeight { get; }
    }
}